package com.stx.liuchang;

import java.util.Scanner;
public class AIAssistantManager {
    private AIManager manager;
    private Scanner scanner;

    // 构造方法
    public AIAssistantManager() {
        this.manager = new AIManager(20); // 最大支持20个助手
        this.scanner = new Scanner(System.in);
    }

    // 主方法
    public static void main(String[] args) {
        AIAssistantManager app = new AIAssistantManager();
        app.run();
    }

    // 运行程序
    public void run() {
        while (true) {
            displayMenu();
            System.out.print("请选择操作: ");
            String choice = scanner.nextLine();

            switch (choice) {
                case "1": // 查看所有AI助手列表
                    manager.displayAllAssistants();
                    break;

                case "2": // 根据ID查询助手详情
                    queryAssistantById();
                    break;

                case "3": // 添加新的AI助手
                    addNewAssistant();
                    break;

                case "4": // 根据ID修改助手信息
                    modifyAssistant();
                    break;

                case "5": // 删除AI助手
                    deleteAssistant();
                    break;

                case "6": // 启动AI助手服务
                    startAssistantService();
                    break;

                case "7": // 停止AI助手服务
                    stopAssistantService();
                    break;

                case "8": // 为AI助手分配任务
                    assignTask();
                    break;

                case "9": // 显示系统统计信息
                    manager.displayStatistics();
                    break;

                case "0": // 退出系统
                    System.out.println("感谢使用AI助手管理器，再见！");
                    scanner.close();
                    return;

                default:
                    System.out.println("❌ 无效选择，请重新输入。");
            }

            System.out.println(); // 空行分隔
        }
    }

    // 私有方法 - 显示菜单
    private void displayMenu() {
        System.out.println("========== AI助手管理器 ==========");
        System.out.println("1. 查看所有AI助手列表");
        System.out.println("2. 根据ID查询助手详情");
        System.out.println("3. 添加新的AI助手");
        System.out.println("4. 根据ID修改助手信息");
        System.out.println("5. 删除AI助手（按ID）");
        System.out.println("6. 启动AI助手服务");
        System.out.println("7. 停止AI助手服务");
        System.out.println("8. 为AI助手分配任务");
        System.out.println("9. 显示系统统计信息");
        System.out.println("0. 退出系统");
        System.out.println("===================================");
    }

    // 私有方法 - 根据ID查询助手
    private void queryAssistantById() {
        System.out.print("请输入要查询的AI助手ID: ");
        String queryId = scanner.nextLine();
        AIAssistant assistant = manager.findAssistantById(queryId);
        if (assistant != null) {
            System.out.println("✅ 查询结果: " + assistant.getDetails());
        } else {
            System.out.println("❌ 未找到ID为 " + queryId + " 的助手。");
        }
    }

    // 私有方法 - 添加新助手
    private void addNewAssistant() {
        System.out.println("添加新AI助手");
        System.out.print("请输入ID: ");
        String id = scanner.nextLine();

        System.out.print("请输入名称: ");
        String name = scanner.nextLine();

        System.out.println("请选择类型: 1.数据分析助手 2.图片生成助手 3.文本生成助手 4.翻译助手 5.语音助手");
        System.out.print("请输入类型编号: ");
        int typeChoice = Integer.parseInt(scanner.nextLine());
        String type = "";
        switch (typeChoice) {
            case 1: type = "数据分析助手"; break;
            case 2: type = "图片生成助手"; break;
            case 3: type = "文本生成助手"; break;
            case 4: type = "翻译助手"; break;
            case 5: type = "语音助手"; break;
            default:
                System.out.println("❌ 无效类型选择，默认为文本生成助手");
                type = "文本生成助手";
        }

        System.out.print("请输入版本号: ");
        String version = scanner.nextLine();

        System.out.print("是否在线？(1-是, 0-否): ");
        boolean online = scanner.nextLine().equals("1");

        System.out.print("请输入能力评分(0-100): ");
        int score = Integer.parseInt(scanner.nextLine());

        // 创建对应类型的助手
        AIAssistant newAssistant;
        switch (type) {
            case "数据分析助手":
                System.out.print("请输入支持的数据格式: ");
                String formats = scanner.nextLine();
                newAssistant = new DataAnalysisAssistant(id, name, version, online, score, formats);
                break;
            case "图片生成助手":
                System.out.print("请输入支持的图片风格: ");
                String styles = scanner.nextLine();
                newAssistant = new ImageGenerationAssistant(id, name, version, online, score, styles);
                break;
            case "文本生成助手":
                System.out.print("请输入最大生成长度: ");
                int maxLength = Integer.parseInt(scanner.nextLine());
                newAssistant = new TextGenerationAssistant(id, name, version, online, score, maxLength);
                break;
            case "翻译助手":
                System.out.print("请输入支持的语言: ");
                String languages = scanner.nextLine();
                newAssistant = new TranslationAssistant(id, name, version, online, score, languages);
                break;
            case "语音助手":
                System.out.print("请输入语音个性: ");
                String personality = scanner.nextLine();
                newAssistant = new VoiceAssistant(id, name, version, online, score, personality);
                break;
            default:
                newAssistant = new TextGenerationAssistant(id, name, version, online, score, 1000);
        }

        manager.addAssistant(newAssistant);
    }

    // 私有方法 - 修改助手信息
    private void modifyAssistant() {
        System.out.print("请输入要修改的AI助手ID: ");
        String modifyId = scanner.nextLine();
        System.out.println("可修改属性列表为：name, type, version, online, score");
        System.out.print("请输入要修改的属性和值，用空格分割: ");
        String[] parts = scanner.nextLine().split(" ");
        if (parts.length == 2) {
            manager.modifyAssistant(modifyId, parts[0], parts[1]);
        } else {
            System.out.println("❌ 输入格式不正确，请按照'属性 值'的格式输入。");
        }
    }

    // 私有方法 - 删除助手
    private void deleteAssistant() {
        System.out.print("请输入要删除的AI助手ID: ");
        String deleteId = scanner.nextLine();
        manager.deleteAssistant(deleteId);
    }

    // 私有方法 - 启动助手服务
    private void startAssistantService() {
        System.out.print("请输入要启动的AI助手ID: ");
        String startId = scanner.nextLine();
        manager.startAssistantService(startId);
    }

    // 私有方法 - 停止助手服务
    private void stopAssistantService() {
        System.out.print("请输入要停止的AI助手ID: ");
        String stopId = scanner.nextLine();
        manager.stopAssistantService(stopId);
    }

    // 私有方法 - 分配任务
    private void assignTask() {
        System.out.print("请输入目标AI助手ID: ");
        String taskId = scanner.nextLine();
        System.out.print("请输入任务内容: ");
        String task = scanner.nextLine();
        manager.assignTask(taskId, task);
    }
}

// ==================== 五种AI助手子类的实现 ====================

// 数据分析助手
class DataAnalysisAssistant extends AIAssistant {
    private String dataFormats; // 支持的数据格式

    public DataAnalysisAssistant(String id, String name, String version, boolean online, int score, String dataFormats) {
        super(id, name, "数据分析助手", version, online, score);
        this.dataFormats = dataFormats;
    }

    @Override
    public void performTask(String task) {
        if (!isOnline()) {
            System.out.println("❌ " + getName() + " 当前离线，无法执行数据分析任务。");
            return;
        }
        System.out.println("📊 " + getName() + " 正在分析数据: " + task);
        System.out.println("✅ 数据分析完成，生成报告已就绪。");
    }

    public String getDataFormats() { return dataFormats; }
    public void setDataFormats(String dataFormats) { this.dataFormats = dataFormats; }
}

// 图片生成助手
class ImageGenerationAssistant extends AIAssistant {
    private String imageStyles; // 支持的图片风格

    public ImageGenerationAssistant(String id, String name, String version, boolean online, int score, String imageStyles) {
        super(id, name, "图片生成助手", version, online, score);
        this.imageStyles = imageStyles;
    }

    @Override
    public void performTask(String task) {
        if (!isOnline()) {
            System.out.println("❌ " + getName() + " 当前离线，无法执行图片生成任务。");
            return;
        }
        System.out.println("🎨 " + getName() + " 正在生成图片: " + task);
        System.out.println("✅ 图片生成完成，已保存到画廊。");
    }

    public String getImageStyles() { return imageStyles; }
    public void setImageStyles(String imageStyles) { this.imageStyles = imageStyles; }
}

// 文本生成助手
class TextGenerationAssistant extends AIAssistant {
    private int maxLength; // 最大生成长度

    public TextGenerationAssistant(String id, String name, String version, boolean online, int score, int maxLength) {
        super(id, name, "文本生成助手", version, online, score);
        this.maxLength = maxLength;
    }

    @Override
    public void performTask(String task) {
        if (!isOnline()) {
            System.out.println("❌ " + getName() + " 当前离线，无法执行文本生成任务。");
            return;
        }
        System.out.println("📝 " + getName() + " 正在生成文本: " + task);
        System.out.println("✅ 文本生成完成，内容已复制到剪贴板。");
    }

    public int getMaxLength() { return maxLength; }
    public void setMaxLength(int maxLength) {
        if (maxLength > 0) {
            this.maxLength = maxLength;
        } else {
            System.out.println("❌ 最大长度必须大于0");
        }
    }
}

// 翻译助手
class TranslationAssistant extends AIAssistant {
    private String supportedLanguages; // 支持的语言

    public TranslationAssistant(String id, String name, String version, boolean online, int score, String supportedLanguages) {
        super(id, name, "翻译助手", version, online, score);
        this.supportedLanguages = supportedLanguages;
    }

    @Override
    public void performTask(String task) {
        if (!isOnline()) {
            System.out.println("❌ " + getName() + " 当前离线，无法执行翻译任务。");
            return;
        }
        System.out.println("🌐 " + getName() + " 正在翻译: " + task);
        System.out.println("✅ 翻译完成，结果已显示。");
    }

    public String getSupportedLanguages() { return supportedLanguages; }
    public void setSupportedLanguages(String supportedLanguages) { this.supportedLanguages = supportedLanguages; }
}

// 语音助手
class VoiceAssistant extends AIAssistant {
    private String voicePersonality; // 语音个性

    public VoiceAssistant(String id, String name, String version, boolean online, int score, String voicePersonality) {
        super(id, name, "语音助手", version, online, score);
        this.voicePersonality = voicePersonality;
    }

    @Override
    public void performTask(String task) {
        if (!isOnline()) {
            System.out.println("❌ " + getName() + " 当前离线，无法执行语音任务。");
            return;
        }
        System.out.println("🎤 " + getName() + " 正在处理语音请求: " + task);
        System.out.println("✅ 语音任务完成，音频已保存。");
    }

    public String getVoicePersonality() { return voicePersonality; }
    public void setVoicePersonality(String voicePersonality) { this.voicePersonality = voicePersonality; }
}
